////
//// Created by zhanxh on 25-5-6.
////
//
//#include "Ui.h"
//#include <regex>
//
//static GtkWidget *lyricView;
//static GtkWidget *lyricbar;
//static GtkTextBuffer *refBuffer;
//static GtkTextTag *tagItalic;
//static GtkTextTag *tagBold;
//static GtkTextTag *tagLarge;
//static GtkTextTag *tagCenter;
//static GtkTextTag *tagSmall;
//static GtkTextTag *tagForegroundColorHighlight;
//static GtkTextTag *tagForegroundColorRegular;
//static GtkTextTag *tagLeftmargin;
//static GtkTextTag *tagRightmargin;
//static GtkTextTag *tagRegular;
//
//static GList *tagsTitle;
//static GList *tagsArtist;
//static GList *tagsSyncline;
//static GList *tagsNosyncline;
//static GList *tagPadding;
//
///**
// * 校验颜色值格式是否正确
// * @param str #ffffff
// * @return 0 false 1 true
// */
//bool isValidHexaCode(const std::string str) {
//    if (str.empty()) {
//        return false;
//    }
//
//    std::regex pattern(R"(^#(?:[0-9a-fA-F]{3}){1,2}$)");
//    return std::regex_match(str, pattern);
//}
//
//// 对齐方式处理
//GtkJustification get_justification(int align) {
//    // int align = deadbeef->conf_get_int("lyricbar.lyrics.alignment", 1);
//    switch (align) {
//        case 0: return GTK_JUSTIFY_LEFT;
//        case 2: return GTK_JUSTIFY_RIGHT;
//        default: return GTK_JUSTIFY_CENTER;
//    }
//}
//
//void init_tags(int fontscale = 1, int margin = 22, int bold = 1, GtkJustification align = GTK_JUSTIFY_CENTER,
//               std::string highlightcolor = "#571c1c", std::string regularcolor = "#000000") {
//    //margin = deadbeef->conf_get_int("lyricbar.border", 22)
//    //scale = deadbeef->conf_get_float("lyricbar.fontscale", 1)
//    refBuffer = gtk_text_buffer_new(NULL);
//
//    tagItalic = gtk_text_buffer_create_tag(refBuffer, "italic", "style", PANGO_STYLE_ITALIC, "scale", fontscale, NULL);
//    tagRegular = gtk_text_buffer_create_tag(refBuffer, "regular", "scale", fontscale, NULL);
//    tagLeftmargin = gtk_text_buffer_create_tag(refBuffer, "leftmargin", "left-margin", margin * fontscale, NULL);
//    tagRightmargin = gtk_text_buffer_create_tag(refBuffer, "rightmargin", "right-margin", margin * fontscale, NULL);
//
//    tagBold = gtk_text_buffer_create_tag(refBuffer, "bold", "weight", PANGO_WEIGHT_BOLD, "scale", fontscale, NULL);
//    tagLarge = gtk_text_buffer_create_tag(refBuffer, "large", "scale", 1.2 * fontscale, NULL);
//    tagSmall = gtk_text_buffer_create_tag(refBuffer, "small", "scale", 0.0001, NULL);
//    tagCenter = gtk_text_buffer_create_tag(refBuffer, "center", "justification", GTK_JUSTIFY_CENTER, NULL);
//
//    tagForegroundColorHighlight = gtk_text_buffer_create_tag(refBuffer, "color_highlight", "foreground", highlightcolor.c_str(), NULL);
//    tagForegroundColorRegular = gtk_text_buffer_create_tag(refBuffer, "color_regular", "foreground", regularcolor.c_str(), NULL);
//
//    tagsTitle = g_list_append(NULL, tagLarge);
//    tagsTitle = g_list_append(tagsTitle, tagBold);
//    tagsTitle = g_list_append(tagsTitle, tagCenter);
//
//    tagsArtist = g_list_append(NULL, tagItalic);
//    tagsArtist = g_list_append(tagsArtist, tagCenter);
//
//
//    if (bold == 1) {
//        tagsSyncline = g_list_append(NULL, tagBold);
//        tagsSyncline = g_list_append(tagsSyncline, tagForegroundColorHighlight);
//
//        tagsNosyncline = g_list_append(nullptr, tagRegular);
//        tagsNosyncline = g_list_append(tagsNosyncline, tagLeftmargin);
//        tagsNosyncline = g_list_append(tagsNosyncline, tagRightmargin);
//        tagsNosyncline = g_list_append(tagsNosyncline, tagForegroundColorRegular);
//    } else {
//        tagsNosyncline = g_list_append(nullptr, tagRegular);
//        tagsNosyncline = g_list_append(tagsNosyncline, tagForegroundColorRegular);
//
//        tagsSyncline = g_list_append(NULL, tagRegular);
//        tagsSyncline = g_list_append(tagsSyncline, tagForegroundColorHighlight);
//    }
//
//    if (align == GTK_JUSTIFY_LEFT) {
//        tagsSyncline = g_list_append(NULL, tagRegular);
//        tagsSyncline = g_list_append(tagsSyncline, tagLeftmargin);
//    }
//    if (align == GTK_JUSTIFY_CENTER) {
//    }
//    if (align == GTK_JUSTIFY_RIGHT) {
//        tagsSyncline = g_list_append(NULL, tagRegular);
//        tagsSyncline = g_list_append(tagsSyncline, tagRightmargin);
//    }
//
//    tagPadding = g_list_append(NULL, tagSmall);
//}
//
//void set_lyrics(gpointer track, std::string past, std::string present, std::string future, std::string padding) {
//    lyric_update_data *ldata = g_new0(lyric_update_data, 1);
//    ldata->track = track;
//    ldata->past = past;
//    ldata->present = present;
//    ldata->future = future;
//    ldata->padding = ""+padding;
//
//    //g_idle_add(update_lyrics_handler, ldata);
//    update_lyrics_handler(ldata);
//}
//
//void insert_with_tags(std::string str, GList *tags) {
//    GtkTextIter start, end;
//    gtk_text_buffer_get_end_iter(refBuffer, &end);
//    start = end;
//    gtk_text_buffer_insert(refBuffer, &end, str.c_str(), -1);
//    for (GList *l = tags; l != NULL; l = l->next) {
//        GtkTextTag *tag = (GtkTextTag *) l->data;
//        if (!tag)
//            continue;
//        gtk_text_buffer_apply_tag(refBuffer, tag, &start, &end);
//    }
//}
//
//void insert_title(std::string str) {
//    GtkTextIter iter;
//    gtk_text_buffer_get_end_iter(refBuffer, &iter);
//	gtk_text_buffer_insert_with_tags(refBuffer, &iter, str.c_str(), -1, tagLarge, tagBold, tagCenter, NULL);
//}
//
//gboolean update_lyrics_handler(gpointer data) {
//    lyric_update_data *ldata = (lyric_update_data *) data;
//
//    if (!is_playing(ldata->track)) {
//        g_free(data);
//        return false;
//    }
//
//    // deadbeef->pl_lock();
//    std::string artist = get_artist(ldata->track);
//    std::string title = get_title(ldata->track);
//    // deadbeef->pl_unlock();
//
//    if (artist.empty()) artist = g_strdup("未知歌手");
//    if (title.empty()) title = g_strdup("未知标题");
//
//    GtkTextIter start, end;
//    gtk_text_buffer_get_bounds(refBuffer, &start, &end);
//    gtk_text_buffer_delete(refBuffer, &start, &end);
//
//    // 插入标题
//    // gtk_text_buffer_insert(refBuffer, &end, title.c_str(), -1);
//    // gtk_text_buffer_apply_tag(refBuffer, tagLarge, &start, &end);
//    // gtk_text_buffer_apply_tag(refBuffer, tagBold, &start, &end);
//    // gtk_text_buffer_apply_tag(refBuffer, tagCenter, &start, &end);
//    insert_with_tags(title, tagsTitle);
//	// insert_title(title);
//
//    if (g_utf8_validate(ldata->future.c_str(), -1, nullptr)) {
//        insert_with_tags(std::string{"\n"} + artist + "\n\n", tagsArtist);
//        insert_with_tags(ldata->padding, tagPadding);
//        insert_with_tags(ldata->past, tagsNosyncline);
//        insert_with_tags(ldata->present, tagsSyncline);
//        insert_with_tags(ldata->future, tagsNosyncline);
//    } else {
//        insert_with_tags(ldata->padding, tagPadding);
//        std::string error = "错误的编码格式";
//        insert_with_tags(error, tagsSyncline);
//    }
//
//    return true;
//}
//
//// 构造歌词控件
//GtkWidget *construct_lyricbar(const std::string bgcolor, GtkJustification just) {
//    init_tags();
//
//    // 创建歌词TextView控件
//    lyricView = gtk_text_view_new_with_buffer(refBuffer);
//    // 设置不可编辑
//    gtk_text_view_set_editable(GTK_TEXT_VIEW(lyricView), FALSE);
//    // 设置不可获得焦点
//    gtk_widget_set_can_focus(lyricView, FALSE);
//    // 设置控件名称（css样式指定控件名称时）
//    gtk_widget_set_name(lyricView, "lyricView");
//
//    // 设置对其方式
//    gtk_text_view_set_justification(GTK_TEXT_VIEW(lyricView), just);
//    // 设置wrap模式
//    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(lyricView), GTK_WRAP_WORD_CHAR);
//
//    // 设置边距
//    if (just == GTK_JUSTIFY_LEFT) {
//        gtk_text_view_set_left_margin(GTK_TEXT_VIEW(lyricView), 20);
//    } else if (just == GTK_JUSTIFY_RIGHT) {
//        gtk_text_view_set_right_margin(GTK_TEXT_VIEW(lyricView), 20);
//    } else {
//        gtk_text_view_set_left_margin(GTK_TEXT_VIEW(lyricView), 10);
//        gtk_text_view_set_right_margin(GTK_TEXT_VIEW(lyricView), 10);
//    }
//
//
//    // 创建滚动窗口
//    lyricbar = gtk_scrolled_window_new(NULL, NULL);
//    // 无水平滚动条，垂直滚动条自动
//    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(lyricbar), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
//    // 添加TextView到滚动条窗口
//    gtk_container_add(GTK_CONTAINER(lyricbar), lyricView);
//    gtk_widget_show_all(lyricbar);
//
//    // 应用CSS样式
//    std::string backgroundcolor = isValidHexaCode(bgcolor) ? bgcolor : "#F6F6F6";
//    char *cssconfig = g_strdup_printf("#lyricView text { background-color: %s; }", backgroundcolor.c_str());
//    // css provider
//    GtkCssProvider *provider = gtk_css_provider_new();
//    gtk_css_provider_load_from_data(provider, cssconfig, -1, NULL);
//
//    GtkStyleContext *context = gtk_widget_get_style_context(lyricView);
//    //gtk_style_context_add_provider
//    gtk_style_context_add_provider(context, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
//
//    return lyricbar;
//}
